define(['server', 'jquery', 'cookie'], (server) => {
    class LoginReg {
        constructor() {
            this.init()
        }
        init() {}
        popBoxAlready(flagclass, animate = 'rollIn') {
            $(`.pop-box-bg.${flagclass}`).fadeIn();
            $('.pop-box').removeClass('bounceOutUp').addClass('animated ' + animate).fadeIn(1000);
            $('.close-pop-box').click(function() {
                $('.pop-box').removeClass(animate).addClass('bounceOutUp').fadeOut(1000, function() {
                    $('.pop-box-bg').fadeOut(300);
                })
            });
            $('.pop-box-bottom .editInfos').on('click', '.login_btn', () => {
                this.loginBtn();
            })
            $('.pop-box-bottom .editInfos').on('click', '.reg_btn', () => {
                this.regBtn();
            })
        }
        loginBtn() {
            let phone = $('.login-box .editInfos .ipt:eq(0)').val();
            let password = $('.login-box .editInfos .ipt:eq(1)').val();
            if (!this.tel(phone)) {
                $('.login-box .errIpt:eq(0)').css('display', 'inline')
                return;
            }
            if (!this.psw(password)) {
                $('.login-box .errIpt:eq(1)').css('display', 'inline')
                return;
            }
            $.post(server.baseServerUrl + '/api/v1/user/login.php', { phone, password }, resp => {
                $('.login-box .respMsg').html(JSON.parse(resp).body.msg)
                if (JSON.parse(resp).code == 200) {
                    if ($('#shopcart').length) {
                        location.reload()
                    }
                    this.alredyLogin(JSON.parse(resp).body.user)
                }
            })

        }
        alredyLogin(resp, animate = 'rollIn') {
            sessionStorage.setItem('loginUser', encodeURIComponent(JSON.stringify(resp)))
            $.userphone = resp.phone
            this.queryCart($.userphone);
            $('.yes_login').removeClass('hidden');
            $('.no_login').addClass('hidden');
            $('.pop-box').removeClass(animate).addClass('bounceOutUp').fadeOut(1000, function() {
                $('.pop-box-bg').fadeOut(300);
            })
            $('#loginedUser').html(resp.username);
            $('#cancelUser').on('click', () => {
                $.cookie("loginUser", "c", { expires: -1, path: '/' });
                sessionStorage.setItem("loginUser", '')
                sessionStorage.removeItem("loginUser")
                location.reload()
            })
            if ($('.login-box .remember').prop("checked")) {
                $.cookie("loginUser", JSON.stringify(resp), { expires: 7, path: '/' });
            }

        }
        regBtn(animate = 'rollIn') {
            let username = $('.reg-box .editInfos .ipt:eq(0)').val();
            let phone = $('.reg-box .editInfos .ipt:eq(1)').val();
            let password = $('.reg-box .editInfos .ipt:eq(2)').val();

            if (!this.userNameCE(username)) {
                $('.reg-box .errIpt:eq(0)').css('display', 'inline')
                return;
            } else {
                $('.reg-box .errIpt:eq(0)').css('display', 'none')
            }
            if (!this.tel(phone)) {
                $('.reg-box .errIpt:eq(1)').css('display', 'inline')
                return;
            } else {
                $('.reg-box .errIpt:eq(1)').css('display', 'none')
            }
            if (!this.psw(password)) {
                $('.reg-box .errIpt:eq(2)').css('display', 'inline')
                return;
            } else {
                $('.reg-box .errIpt:eq(2)').css('display', 'none')
            }

            if (!$('.alredyRead').prop("checked")) {
                $('.reg-box .errIpt:eq(3)').css('display', 'inline')
                return
            }
            $.post(server.baseServerUrl + '/api/v1/user/reg.php', { username, phone, password }, resp => {
                $('.reg-box .respMsg').html(JSON.parse(resp).body.msg)
                if (JSON.parse(resp).code == 200) {
                    $('.pop-box').removeClass(animate).addClass('bounceOutUp').fadeOut(1000, function() {
                        $('.pop-box-bg').fadeOut(300);
                    })
                }
            })
        }

        queryCart(phone) {
            $.post(server.baseServerUrl + '/api/v1/goods/selectCart.php', { phone }, resp => {
                if (JSON.parse(resp).code == 200) {
                    let sum = JSON.parse(resp).body.list.reduce((sum, next) => {
                        sum += next.goods_count * 1
                        return sum
                    }, 0)
                    $('.yes_login .shopcart_num').html(sum);
                }
            })
        }
        userNameCE(str) { //带中文字符的
            var reg = /^[\u4e00-\u9fa5a-zA-Z0-9_]+$/;
            var res1 = 0;
            if (reg.test(str)) {
                res1 = str.replace(/[\u4e00-\u9fa5]/g, 'aa').length;
            }
            return res1 > 18 || res1 < 2 ? false : true
        }
        tel(str) {
            var reg = /^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$/; //手机号码
            return reg.test(str);
        }
        psw(str) {
            var reg = /^\w{6,18}$/; //字母或下划线开头的用户名
            return reg.test(str);
        }
    }
    return new LoginReg()
})